﻿#define _CRT_SECURE_NO_WARNINGS
// ↑ 将本行在代码放在第一行可以避免 scanf的报错问题（仅在VS编译器里）
//【初阶篇】26.休息
//【初阶篇】27.分支和循环语句_while（上）
//【初阶篇】28.休息
//【初阶篇】29.分支和循环语句_while（下）1
//【初阶篇】30.分支和循环语句_while（下）2


#include<stdio.h>

int main()
{
	//27.循环语句while（上）
	int i = 1;
	while (i <= 10)					//表达式为真，则会一直执行循环体内的程序
	{
		i++;
		if (5 == i)
			{ 
				//break;					//当 i=5时跳出循环，说明break可以在循环中使用直接终止循环
				continue;					//continue的作用是跳过本次循环重新从循环起点继续执行程序
			}
		printf("%d\n",i);
										//当表达式为假时跳出循环继续执行后续代码
	}
	//-----------------------

	//29.循环语句while（下）1
	//30.循环语句while（下）2
		
	{
		//getchar、scanf、putchar功能及用法体验
		// 输入 123 456回车
		int ch1 = 0;
		char ch2[] = { 0 };
		char ch3[] = { 0 };
		ch1 = getchar();
		putchar(ch1);
		printf("\n");
		scanf("%s", ch2);
		scanf("%s", &ch3);
		printf("ch2->%s\n", ch2);
		printf("ch3->%s\n", ch3);
		printf("ch2地址->%x\n", ch2);
		printf("ch3地址->%x\n", ch3);
	}
		
	int ch = 0;
	char password[20] = { 0 };
	printf("请输入密码:>");
	scanf("%s",password);
	/* getchar(); */
		//利用这个getchar可以把输入密码后，输入缓存区残留的/n拿走
		//但如果密码中有空格,那么scanf读到空格就停止了
		//这时候getchar则会拿走密码中的空格无法将缓、存区清理干净
	while ((ch = getchar()) != '\n') // 所以利用一个循环语句持续去提取输入缓存区的内容，直到提取到回车-\n为止跳出循环
	{
		printf("清除输入缓冲区内容:>%c\n本行是用putchar显示:>",ch);//利用这个函数可以观察到在getchar提取缓存区内容时是每次提取一个字符
		putchar(ch);											   //所以putchar也是每次输出一个字符直至循环结束
		printf("\n");
	}
	printf("跳出循环时清除的输入缓冲区内容:>%c\n本行是用putchar显示:>",ch);//跳出循环时提取到的是\n
	putchar(ch);
	printf("输入密码为:>%s\n", password);//通过本行可以看到 scanf在遇到空格的时候就停止了提取输入缓存区的内容
	printf("请确认密码（Y/N）:>");
	int ret = getchar();
	if (ret == 'Y')
	{
		printf("Yes\n");
	}
	else
	{
		printf("No\n");
	}
	while ((ch = getchar()) != EOF)
		{
			putchar(ch);										   //在这里每次显示输出的虽然是一段字符串，但其实是一个一个字符由putchar输出出来的
		}
	//-----------------------

	return  0;
}
//27.分支和循环语句_while（上）
	// while（表达式）表达式为真则执行循环内的代码，为假则跳出循环
	// break是永久终止循环
	// continue是跳过本次循环后面的代码之间去判断部分进行下一次的循环的判断
//29.分支和循环语句_while（下）1
//30.分支和循环语句_while（下）2
	//getchar()是获得键盘的输入的字符，其是从输入缓存区取值，一个字符一个字符的提取，被提取的字符则会从输入缓存区清除
	//scanf()也是从输入缓冲区取值以获得键盘中的输入，遇到“ ”空格时会停止获取
	//putchar()是把获得到的字符输出出来，且输出是根据getchar的内容输出的，可以理解为一个一个输出

